#  *args 和 **kwargs 用法解析
# 不定长的位置 传参：*args
# 不定长的关键字传参：**kwargs（函数未定义的关键字参数，会被kwargs接收）
def param_demo(a=None,b=None,*args,**kwargs):
    print(f"a的值为{a},b的值为{b}")
    print(f"args为不定长的位置传参：其他的参数为{args}")
    print(f"kwargs为不定长的关键字传参：{kwargs}")

# 位置传参
#if __name__ == '__main__':
#   param_demo(1,2)

# 关键字传参
#if __name__ == '__main__':
#   param_demo(b=2)


# *args传参：除了已知的参数会被传入以外，其他未知的参数也会被一起传入到args里去
# 这时候一般就会涉及到args的元祖的解包
if __name__ == '__main__':
   # param_demo(a=None,b=None,*args)  定义的参数有a,b,*args
   # 如果传入的参数有5个，那么会将1传给a，2传给b，3,4,5一起作为元祖传给args
   param_demo(1,2,3,4,5,c=100,d=200)
   #打印结果为：
   #a的值为1, b的值为2
   #args为不定长的位置传参：其他的参数为(3, 4, 5)
   #kwargs为不定长的关键字传参：{'c': 100, 'd': 200}